from _ast import Assert

from selenium.common.exceptions import NoSuchElementException

import 抖音数据获取
from selenium import webdriver
import time
import pyautogui as pg
import pywinauto
from pywinauto.keyboard import send_keys
import smtplib
from email.mime.text import MIMEText
from PIL import Image, ImageEnhance
import pytesseract
from selenium.webdriver import ActionChains
from selenium.webdriver.support import expected_conditions as EC

screenWidth,screenHight=pg.size()
currentMouseX,currentMouseY=pg.position()
pg.FAILSAFE = True


def 点击操作拉取():
    #获取坐标基本参数
    try:
        pg.moveTo(112,1058,duration=1)
        pg.click()
        #点击浏览器地址输入框
        time.sleep(2)
        pg.moveTo(608,51,duration=1)
        pg.click()
        pg.write("https://fxg.jinritemai.com/",interval=0.15)
        #有输入法的存在，所以要按两次回车
        pg.press("enter")
        pg.press("enter")
        time.sleep(2)
        点击登录按钮=pg.locateOnScreen(r"G:\Python Project\抖音数据获取\img\抖音后台登录按钮.png")
        pg.click(点击登录按钮)
        #默认使用邮箱登录
        邮箱登录=pg.locateOnScreen(r"G:\Python Project\抖音数据获取\img\邮箱登录.png")


    except Exception as e:
        运行失败后的邮件()
        print(e)


def 运行失败后的邮件():
    #设置邮箱所需的服务器信息和账号等信息
    邮箱服务器地址="smtp.ym.163.com"
    邮箱用户名="huhao@xyooou.com"
    邮箱密码="aaabbb123"
    发送人邮件地址="huhao@xyooou.com"
    #“发送给”可以有多个人，所以用数组
    收件人=["2427825281@qq.com"]
    #设置邮箱信息
    #设置邮箱消息内容
    消息=MIMEText('抖音数据拉取失败，请及时查看脚本执行情况，具体原因请查看Pycharm输出的错误信息，谢谢~','plain','UTF-8')
    #邮件标题
    消息['Subject']='抖音数据获取程序出错，请及时查看，谢谢~'
    #发件人信息
    消息['From']=发送人邮件地址
    #接收方信息
    消息['To']=收件人[0]
    #使用这些信息登录，并发送邮件
    try:
        连接服务器=smtplib.SMTP()
        #连接到服务器
        连接服务器.connect(邮箱服务器地址,25)
        #登录到服务器
        连接服务器.login(邮箱用户名,邮箱密码)
        #发送邮件
        连接服务器.sendmail(发送人邮件地址,收件人,消息.as_string())
        #退出连接服务器
        连接服务器.quit()
        print("运行报错,邮件发送成功~")
    except Exception as e:
        print(e)


def 未获取到属性标签的邮件():
    #设置邮箱所需的服务器信息和账号等信息
    邮箱服务器地址="smtp.ym.163.com"
    邮箱用户名="huhao@xyooou.com"
    邮箱密码="aaabbb123"
    发送人邮件地址="huhao@xyooou.com"
    #“发送给”可以有多个人，所以用数组
    收件人=["2427825281@qq.com"]
    #设置邮箱信息
    #设置邮箱消息内容
    消息=MIMEText('抖音拉取数据的脚本，有未获取到element的错误，请及时查看，谢谢~','plain','UTF-8')
    #邮件标题
    消息['Subject']='抖音数据获取程序出错，请及时查看，谢谢~'
    #发件人信息
    消息['From']=发送人邮件地址
    #接收方信息
    消息['To']=收件人[0]
    #使用这些信息登录，并发送邮件
    try:
        连接服务器=smtplib.SMTP()
        #连接到服务器
        连接服务器.connect(邮箱服务器地址,25)
        #登录到服务器
        连接服务器.login(邮箱用户名,邮箱密码)
        #发送邮件
        连接服务器.sendmail(发送人邮件地址,收件人,消息.as_string())
        #退出连接服务器
        连接服务器.quit()
        print("未获取到element的邮件发送成功~")
    except Exception as e:
        print(e)



def 打开小柚页面():
    wb=webdriver.Chrome()
    wb.maximize_window()
    try:
        wb.get("http://172.20.25.9:9000")
        #####以下是验证码#####
        # 截取屏幕内容，保存到本地
        wb.save_screenshot(r"G:\Python Project\xyou_auto\小柚供应链\image\01.png")
        # 3、打开截图，获取验证码位置，截取保存验证码
        ran = Image.open(r"G:\Python Project\xyou_auto\小柚供应链\image\01.png")
        box = (1352, 520, 1429, 553)  # 获取验证码位置,自动定位不是很明白，就使用了手动定位，代表（左，上，右，下）
        ran.crop(box).save(r"G:\Python Project\xyou_auto\小柚供应链\image\02.png")
        # 获取验证码图片，读取验证码
        imageCode = Image.open(r"G:\Python Project\xyou_auto\小柚供应链\image\02.png")  # 图像增强，二值化
        # imageCode.load()
        sharp_img = ImageEnhance.Contrast(imageCode).enhance(2.0)
        sharp_img.save(r"G:\Python Project\xyou_auto\小柚供应链\image\03.png")
        sharp_img.load()  # 对比度增强
        global code
        time.sleep(2)
        code = pytesseract.image_to_string(sharp_img).strip()
        # 收到验证码，进行输入验证
        print(code)
        #####以上是验证码#####
        #输入账号密码
        wb.find_element_by_id("txtUser").send_keys("kangmin")
        wb.find_element_by_id("txtPass").send_keys("km123456789")
        time.sleep(2)
        wb.find_element_by_id("txt_code").send_keys(code)
        time.sleep(2)
        #登录
        wb.find_element_by_id("login_button").click()
        time.sleep(2)
        alert是否存在=EC.alert_is_present()(wb)
        if alert是否存在:
            print(alert是否存在.text)
            alert是否存在.accept()
            打开小柚页面()
        else:
            #选择管理员
            wb.find_elements_by_class_name("btn-primary")[4].click()
            #点击旺店通管理
            wb.find_elements_by_css_selector(".nav-label")[12].click()
            #点击精选联盟订单
            time.sleep(2)
            wb.find_elements_by_css_selector("ul.in .J_menuItem")[3].click()
            #进入精选联盟的iframe
            time.sleep(2)
            wb.switch_to_frame("iframe4")
            time.sleep(2)
            点击文件上传按钮=wb.find_element_by_id("DefaultContent_fuTmp")
            ActionChains(wb).click(点击文件上传按钮).perform()
            time.sleep(2)
            # 操作文件选择框
            Pwa = pywinauto.Desktop()
            # 锁定打开的文件上传窗口
            文件窗口 = Pwa["打开"]
            time.sleep(4)
            # 下方是文件地址框输入
            文件窗口["Toolbar3"].click()
            time.sleep(4)
            # 输入路径
            send_keys("下载")
            time.sleep(4)
            # 输入回车键
            send_keys("{VK_RETURN}")
            time.sleep(4)
            #    选中文件名输入框，输入文件名
            pg.moveTo(368,180)
            pg.doubleClick()
            time.sleep(4)
            wb.find_element_by_id("DefaultContent_btnImport").click()
            time.sleep(4)
    except NoSuchElementException:
        print(NoSuchElementException)
        未获取到属性标签的邮件()
    except Exception:
        运行失败后的邮件()

if __name__ == '__main__':
    点击操作拉取()
    打开小柚页面()